package teacher;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/login")
public class LoginServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1. 读取请求传来的参数 (用户名和密码)
        //    最好先给请求设置一下字符集. 否则如果 username 是中文, 此处的 getParameter 可能会乱码.
        req.setCharacterEncoding("utf8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        // 2. 验证用户名密码, 是否是正确的. 一般来说, 验证用户名密码, 是要通过数据库的.
        //    此处为了简单一点, 先把用户名和密码, 写死. 比如此处假设正确的用户名是 zhangsan, 正确的密码是 123
        //    此处还要注意, 上述 getParameter 可能会拿到 null .  为了避免 空指针异常, 下面这种比较方式是更合适的写法.
        if (!"zhangsan".equals(username) || !"123".equals(password)) {
            // 登录失败
            // 给用户返回一个提示.
            resp.setContentType("text/html; charset=utf8");
            resp.getWriter().write("当前的用户名或者密码错误!");
            return;
        }
        // 3. 登录成功了, 给这个用户创建一个会话出来.
        //    可以给会话中保存一些自定义的数据, 通过 Attribute 的方式来保存.
        HttpSession session = req.getSession(true);
        //    此处 Attribute 也是键值对. 这里的内容存储什么都可以. 程序员自定义的.
        //    这样的数据存储好了之后, 后续跳转到其他的页面, 也随时可以把这个数据从会话中取出来.
        session.setAttribute("username", username);
        session.setAttribute("loginTime", System.currentTimeMillis());
        // 4. 此时相当于登录成功!! 让页面跳转到网站首页.
        resp.sendRedirect("index");
    }
}